import routeGuard from './src'
import { isEmpty, isNumber, isObject, isString, json, objectToUrl } from './uitls'

const router = {
	install(app){
		app.use(routeGuard)
	},
	/** 追加路由栈
	 *  @param { string } url 页面路径
	 *  @param { data } data 路由参数
	 *  @param { object } other 其他参数
	 */
	push(url, data={}, other={}){
		return uni.navigateTo({
			url: url+objectToUrl(data, '?'),
			...other,
		})
	},
	/**  替换路由中的当前栈
	 *  @param { String } url 要跳转的url路径
	 *  @param { Object } data 路径参数
	 *  @param { other } other 其他参数
	 */
	replace(url, data={}, other={}){
		return uni.redirectTo({
			url: url+objectToUrl(data, '?'),
			...other,
		})
	},
	/**  关闭所有页面，打开到应用内的某个页面
	 *  @param { String } url 要跳转的url路径
	 *  @param { Object } data 路径参数
	 *  @param { other } other 其他参数
	 */
	reLaunch(url, data={}, other={}){
		return uni.reLaunch({
			url: url+objectToUrl(data, '?'),
			...other,
		})
	},
	/**  跳转到 tabBar 页面，并关闭其他所有非 tabBar 页面。 
	 *  @param { String } url 要跳转的url路径
	 *  @param { other } other 其他参数
	 */
	switchTab(url, other={}){
		return uni.switchTab({
			url,
			...other,
		})
	},
	/**
	 * 关闭当前页面，返回上一页面或多级页面
	 * @param { number } delta 返回的页面数
	 * @param { object } other 其他参数
	 */
	back(delta=1, other={}){
		return uni.navigateBack({
			delta,
			...other
		})
	},
	/**
	 * 获取所有 路由记录的完整列表
	 * @return { array } 当前路由栈列表
	 */
	getRoutes(){
		return getCurrentPages()
	},
	/**
	 * 返回当前页面路由对象
	 * @return { object }
	 */
	route(){
		return getCurrentPages().slice(-1)[0]
	},
	/**
	 * 添加一个前置导航守卫
	 * @param { function } callback 回调函数
	 */
	beforeEach(callback){
		routeGuard.beforeEach(callback)
	},
	/**
	 * 添加一个后置导航守卫
	 * @param { function } callback 回调函数
	 */
	afterEach(callback){
		routeGuard.afterEach(callback)
	},
	/**
	 * 监听路由跳转错误
	 * @param { function } callback 回调函数
	 */
	onError(callback){
		uni.onPageNotFound(callback)
	},
	
}

export default router